<template>

  <div id="app">
    <!-- 动态组件 component, 根据下标的变化,动态的切换组件( 卸载上一个组件,挂载下一个组件 ) -->
    <!-- 动态组件 component, 特点是: is属性的值可以是具体的组件, 也可以是组件的名字 -->
    <!-- 动画组件 transition , 其中name属性可以规定动画名称的前缀 , mode设置入场动画,离场动画的播放顺序, out-in 先出后入, in-out 先入后出-->
    <!-- 缓存组件 keep-alive , 内部的组件在切换时, 不需要显示的组件会缓存起来(而不是销毁),当组件重新显示时只是从缓存中取出显示即可(不会重新实例化) -->
    <!-- 使用了缓存组件以后, 对于多个需要切换的组件, 当组件不显示的时候会被缓存,当组件第一次显示的时候会实例化并挂载, 对于需要频繁切换的组件而言可以用缓存组件,缺点就是存在内存泄漏的风险 -->
    <!-- 缓存组件 keep-alive , max属性可以指定最大缓存数 ,include指定哪些组件能被缓存 -->
    <transition name="fade" mode="out-in">
      <keep-alive :max="10" include="Home,Order"> 
        <component :is="coms[currentIndex]" />
      </keep-alive>
    </transition>
    
    <div class="tabbar">
      <span :class="{active: currentIndex == index }" v-for="(item,index) in btns" :key="index" @click="currentIndex=index">{{item}}</span>
    </div>

  </div>
</template>

<script>
import Home from './components/Home.vue'
import Booml from './components/Booml.vue'
import Order from './components/Order.vue'
import Mine from './components/Mine.vue'

export default {
  data(){
    return {
      currentIndex:0,
      btns:['首页','爆爆团','订单','我的'],
      // coms:[Home,Order,Mine],
      coms:['Home','Booml','Order','Mine'],
    }
  },
  components:{
    Home,
    Booml,
    Order,
    Mine
  }
}
</script>

<style lang="scss">
*{
  margin: 0;
  padding: 0;
}
.tabbar{
  display: flex;
  justify-content: space-around;
  align-content: center;
  padding: 10px 0;
  position: fixed;
  bottom: 0;
  width: 100%;
  box-sizing: border-box;
  border-top: 1px solid #ccc;
}
.tabbar .active{
  color: lightskyblue;
}

//入场动画
.fade-enter{ // 动画开始时的状态
  opacity: 0;
}
.fade-enter-active{
  transition: all 1s;
}
.fade-enter-to{ // 动画结束时的状态
  opacity: 1;
  // transform: scale(1) rotate(360deg);
}


</style>
